package com.hctg.forced2sleep.utils;

import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;

import androidx.annotation.NonNull;

import com.actor.myandroidframework.utils.LogUtils;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.RomUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.wanghong.cromappwhitelist.AppWhitelist;
import com.wanghong.cromappwhitelist.AppWhitelistConfig;

/**
 * Description: 白名单工具类 <br />
 * 跳转手机i管家"允许自启动(开机或后台自启动)", "允许关联启动(可被其他应用启动)", "允许后台活动(可在后台运行)"
 * https://www.jianshu.com/p/9d729147cea9
 *
 * @author     : ldf
 * @date       : 2019/12/19 on 17:18
 */
public class WhiteListUtils {

    /**
     * 跳转手机"开机自启页面"
     */
    public static boolean gotoLaunchList(Context context) {
        if (true) {
            //appwhitelist.json
            AppWhitelist.settingForAutoStart(context);
            return true;
        }
        Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        ComponentName componentName = null;

        if (RomUtils.isXiaomi()) {// 红米Note4测试通过
            componentName = new ComponentName("com.miui.securitycenter",
                    "com.miui.permcenter.autostart.AutoStartManagementActivity");

        } else if (RomUtils.isLeeco()) {// 乐视2测试通过
            intent.setAction("com.letv.android.permissionautoboot");

        } else if (RomUtils.isSamsung()) {// 三星Note5测试通过
            componentName = new ComponentName("com.samsung.android.sm_cn",
                    "com.samsung.android.sm.ui.ram.AutoRunActivity");

        } else if (RomUtils.isHuawei()) {// 华为测试通过
            goHuaweiSetting(context);

        } else if (RomUtils.isVivo()) {// VIVO测试通过
            //"自启动管理"页面, 打开被拒绝
            componentName = ComponentName.unflattenFromString("com.iqoo.secure/" +
                    ".ui.phoneoptimize.BgStartUpManager");
            //"权限管理"页面, 打开被拒绝
//            componentName = ComponentName.unflattenFromString("com.iqoo.secure/" +
//            ".safeguard.PurviewTabActivity");
            //"软件管理"界面, 打开被拒绝
//            componentName = ComponentName.unflattenFromString("com.iqoo.secure//" +
//            ".appmanager.AppManagerActivity");

        } else if (RomUtils.isMeizu()) {//万恶的魅族
            // 通过测试，发现魅族是真恶心，也是够了，之前版本还能查看到关于设置自启动这一界面，系统更新之后，完全找不到了，心里默默Fuck！
            // 针对魅族，我们只能通过魅族内置手机管家去设置自启动，所以我在这里直接跳转到魅族内置手机管家界面，具体结果请看图
            componentName = ComponentName.unflattenFromString("com.meizu.safe/" +
                    ".permission.PermissionMainActivity");

        } else if (RomUtils.isOppo()) {// OPPO R8205测试通过
            componentName = ComponentName.unflattenFromString("com.oppo.safe/" +
                    ".permission.startup.StartupAppListActivity");

        } else if (RomUtils.is360()) {// 360手机 未测试
            componentName = new ComponentName("com.yulong.android.coolsafe",
                    ".ui.activity.autorun.AutoRunListActivity");
        } else {
            // 以上只是市面上主流机型，由于公司你懂的，所以很不容易才凑齐以上设备
            // 针对于其他设备，我们只能调整当前系统app查看详情界面
            // 在此根据用户手机当前版本跳转系统设置界面
            if (Build.VERSION.SDK_INT >= 9) {
                intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
                intent.setData(Uri.fromParts("package", context.getPackageName(), null));
            } else if (Build.VERSION.SDK_INT <= 8) {
                intent.setAction(Intent.ACTION_VIEW);
                intent.setClassName("com.android.settings",
                        "com.android.settings.InstalledAppDetails");
                intent.putExtra("com.android.settings.ApplicationPkgName",
                        context.getPackageName());
            }
        }
        intent.setComponent(componentName);

        try {
            context.startActivity(intent);
            return true;
        } catch (Exception e) {//抛出异常就直接打开设置页面
            e.printStackTrace();
            //java.lang.SecurityException: Permission Denial: starting Intent
            // { flg=0x10000000 cmp=com.iqoo.secure/.safeguard.PurviewTabActivity }
            // from ProcessRecord{32d63763 25125:com.hctg.forced2sleep/u0a1772}
            // (pid=25125, uid=11772) not exported from uid 10053
            if (e instanceof ActivityNotFoundException) {
                ToastUtils.showShort("打开的页面不对...");
            } else if (e instanceof SecurityException) {
                ToastUtils.showShort("打开自启页面被系统拒绝了");
            }
//            gotoSetting(context);
        }
        return false;
    }

    /**
     * 跳转手机白名单
     * https://www.jianshu.com/p/32b7241124a2?utm_campaign=haruki
     */
    public static boolean gotoWhiteList(Context context) {
        String phoneType = RomUtils.getRomInfo().getName();
        LogUtils.error("当前手机型号为：" + phoneType);

        Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        ComponentName componentName = null;

        if (RomUtils.isXiaomi()) {//小米: 操作步骤：授权管理 -> 自启动管理 -> 允许应用自启动
            showActivity(context, "com.miui.securitycenter",
                    "com.miui.permcenter.autostart.AutoStartManagementActivity");
        } else if (RomUtils.isLeeco()) {//乐视 操作步骤：自启动管理 -> 允许应用自启动
//            intent.setAction("com.letv.android.permissionautoboot");
            showActivity(context, "com.letv.android.letvsafe",
                    "com.letv.android.letvsafe.AutobootManageActivity");
        } else if (RomUtils.isSamsung()) {//三星 操作步骤：自动运行应用程序 -> 打开应用开关 -> 电池管理 -> 未监视的应用程序 -> 添加应用
//            componentName = new ComponentName("com.samsung.android.sm_cn", "com.samsung" +
//                    ".android.sm.ui.ram.AutoRunActivity");
            try {
                showActivity(context, "com.samsung.android.sm_cn");
            } catch (Exception e) {
                e.printStackTrace();
                try {
                    showActivity(context, "com.samsung.android.sm");
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        } else if (RomUtils.isHuawei()) {//华为: 操作步骤：应用启动管理 -> 关闭应用开关 -> 打开允许自启动
//            componentName = new ComponentName("com.huawei.systemmanager",
//                    "com.huawei.systemmanager.optimize.process.ProtectActivity");
            try {
                showActivity(context, "com.huawei.systemmanager",
                        "com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity");
            } catch (Exception e) {
                e.printStackTrace();
                try {
                    showActivity(context, "com.huawei.systemmanager",
                            "com.huawei.systemmanager.optimize.bootstart.BootStartActivity");
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        } else if (RomUtils.isVivo()) {//VIVO 操作步骤：权限管理 -> 自启动 -> 允许应用自启动
            componentName = ComponentName.unflattenFromString("com.iqoo.secure/.ui.phoneoptimize.AddWhiteListActivity");
//            showActivity(context, "com.iqoo.secure");
        } else if (RomUtils.isMeizu()) {//魅族 操作步骤：权限管理 -> 后台管理 -> 点击应用 -> 允许后台运行
//            componentName = ComponentName.unflattenFromString("com.meizu.safe/.permission" +
//                    ".PermissionMainActivity");
            showActivity(context, "com.meizu.safe");
        } else if (RomUtils.isOppo()) {//OPPO: 操作步骤：权限隐私 -> 自启动管理 -> 允许应用自启动
//            componentName = ComponentName.unflattenFromString("com.oppo.safe/.permission" +
//                    ".startup.StartupAppListActivity");
            try {
                showActivity(context, "com.coloros.phonemanager");
            } catch (Exception e) {
                e.printStackTrace();
                try {
                    showActivity(context, "com.oppo.safe");
                } catch (Exception e1) {
                    e1.printStackTrace();
                    try {
                        showActivity(context, "com.coloros.oppoguardelf");
                    } catch (Exception e2) {
                        e2.printStackTrace();
                        try {
                            showActivity(context, "com.coloros.safecenter");
                        } catch (Exception e3) {
                            e3.printStackTrace();
                        }
                    }
                }
            }
        } else if (RomUtils.is360()) {//360手机
//            componentName = new ComponentName("com.yulong.android.coolsafe", ".ui.activity" +
//                    ".autorun.AutoRunListActivity");

        } else if (RomUtils.isSmartisan()) {//锤子 操作步骤：权限管理 -> 自启动权限管理 -> 点击应用 -> 允许被系统启动
            showActivity(context, "com.smartisanos.security");

        } else {//其他设备，我们只能调整当前系统app查看详情界面
            intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
            intent.setData(Uri.fromParts("package", context.getPackageName(), null));
        }

        intent.setComponent(componentName);
        try {
            context.startActivity(intent);
            return true;
        } catch (Exception e) {//抛出异常就直接打开设置页面
            e.printStackTrace();
            //java.lang.SecurityException: Permission Denial: starting Intent
            // { flg=0x10000000 cmp=com.iqoo.secure/.safeguard.PurviewTabActivity }
            // from ProcessRecord{32d63763 25125:com.hctg.forced2sleep/u0a1772}
            // (pid=25125, uid=11772) not exported from uid 10053
            if (e instanceof SecurityException) {
                ToastUtils.showShort("打开自启页面被系统拒绝了");
            }
//            gotoSetting(context);
        }
        return false;
    }

    private static void goHuaweiSetting(Context context) {
        //我的华为 HONOR v30, 打不开具体页面, 只能打开管家..
        ActivityUtils.startLauncherActivity("com.huawei.systemmanager");
        ComponentName componentName = new ComponentName("com.huawei.systemmanager",
                "com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity");

//            componentName = new ComponentName("com.huawei.systemmanager",
//                    "com.huawei.systemmanager.optimize.process.ProtectActivity");

        try {
            if (true) {
                showActivity(context, "com.huawei.systemmanager",
                        "com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity");
                return;
            }
            showActivity(context, "com.huawei.systemmanager",
                    "com.huawei.systemmanager.optimize.bootstart.BootStartActivity");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 跳转到指定应用的首页
     */
    protected static void showActivity(Context context, @NonNull String packageName) {
        Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
        context.startActivity(intent);
    }

    /**
     * 跳转到指定应用的指定页面
     */
    protected static void showActivity(Context context, @NonNull String packageName, @NonNull String activityDir) {
        Intent intent = new Intent();
        intent.setComponent(new ComponentName(packageName, activityDir));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }

    public static void gotoSetting(Context context) {
        Intent intent = new Intent(Settings.ACTION_SETTINGS);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }
}
